package com.galaxy.service.service.system;

import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.IService;
import com.galaxy.service.dto.SignInDto;
import com.galaxy.service.dto.system.user.QueryUserDto;
import com.galaxy.service.dto.system.user.ResetPasswordDto;
import com.galaxy.service.dto.system.user.UserAddDto;
import com.galaxy.service.dto.system.user.UserUpdateDto;
import com.galaxy.service.entity.system.Permission;
import com.galaxy.service.entity.system.Role;
import com.galaxy.service.entity.system.User;
import com.galaxy.service.vo.UserVo;
import java.util.List;

/**
 * 用户服务接口
 * @author caijinbang
 * @date 2018/10/27 18:13
 */
public interface UserService extends IService<User>{

  /**
   * 根据用户名查找用户
   * @param name 用户名称
   * @param hasPermission 是否有权限
   * @return
   */
  public User findUserByName(String name,boolean hasPermission);

  /**
   * 根据ID查找用户
   * @param id 用户id
   * @param hasPermission 是否权限
   * @return User
   */
  public User findUserById(String id,boolean hasPermission);

  /**
   * 用户登录操作
   * @param signInDto 登录信息
   */
  public void signIn(SignInDto signInDto);

  /**
   * 获取当前登录用户信息
   * @return UserVO
   */
  public UserVo getCurrentUser();

  /**
   * 获取当前登录用户所有的权限标示
   * @return UserVO
   */
  public List<String> getAllPermissionTag();

  /**
   * 用户角色资源匹配
   * @param roles 用户角色集
   * @return 资源集合
   */
  public List<Permission> userRolesRegexResource(List<Role> roles);


  /**
   * 获取所有用户（分页）
   * @param findUserDTO 过滤条件
   * @return RequestResult
   */
  public Page<UserVo> getAllUserBySplitPage(QueryUserDto findUserDTO);

  /**
   * 用户状态改变
   * @param userId 用户ID
   * @param status 状态码
   */
  public void statusChange(String userId, Integer status);

  /**
   * 删除用户
   * @param userId 用户ID
   */
  public void removeUser(String userId);

  /**
   * 添加用户
   * @param userAddDto 用户数据DTO
   */
  public void add(UserAddDto userAddDto);

  /**
   * 更新用户数据
   * @param id 用户id
   * @param userUpdateDto 用户数据DTO
   */
  public void update(String id, UserUpdateDto userUpdateDto);

  /**
   * 更新用户角色关联
   * @param user
   * @return
   */
  public void updateUserRole(User user);

  /**
   * 重置用户密码
   * @param resetPasswordDto 重置密码dto
   */
  public void resetPassword(ResetPasswordDto resetPasswordDto);
}
